home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / ACTORS next >
Text File  |  1991-05-20  |  10KB  |  408 lines

  1. /* AAPPLI- APPLICABLES FOR ADVENTURERS */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include "funcs.h"
  8. #include "vars.h"
  9.  
  10. logical aappli_(ri)
  11. integer ri;
  12. {
  13.     /* System generated locals */
  14.     logical ret_val;
  15.  
  16.     /* Local variables */
  17.     logical f;
  18.     integer i;
  19.  
  20.     if (ri == 0) {
  21.     goto L10;
  22.     }
  23. /*                         !IF ZERO, NO APP. */
  24.     ret_val = TRUE_;
  25. /*                         !ASSUME WINS. */
  26.     switch (ri) {
  27.     case 1:  goto L1000;
  28.     case 2:  goto L2000;
  29.     }
  30. /*                         !BRANCH ON ADV. */
  31.     bug_(11, ri);
  32.  
  33. /* COMMON FALSE RETURN. */
  34.  
  35. L10:
  36.     ret_val = FALSE_;
  37.     return ret_val;
  38.  
  39. /* A1--    ROBOT.  PROCESS MOST COMMANDS GIVEN TO ROBOT. */
  40.  
  41. L1000:
  42.     if (prsvec_1.prsa != vindex_1.raisew || prsvec_1.prso != oindex_1.rcage) {
  43.  
  44.     goto L1200;
  45.     }
  46.     cevent_1.cflag[cindex_1.cevsph - 1] = FALSE_;
  47. /*                         !ROBOT RAISED CAGE. */
  48.     play_1.winner = aindex_1.player;
  49. /*                         !RESET FOR PLAYER. */
  50.     f = moveto_(rindex_1.cager, play_1.winner);
  51. /*                         !MOVE TO NEW ROOM. */
  52.     newsta_(oindex_1.cage, 567, rindex_1.cager, 0, 0);
  53. /*                         !INSTALL CAGE IN ROOM. */
  54.     newsta_(oindex_1.robot, 0, rindex_1.cager, 0, 0);
  55. /*                         !INSTALL ROBOT IN ROOM. */
  56.     advs_1.aroom[aindex_1.arobot - 1] = rindex_1.cager;
  57. /*                         !ALSO MOVE ROBOT/ADV. */
  58.     findex_1.cagesf = TRUE_;
  59. /*                         !CAGE SOLVED. */
  60.     objcts_1.oflag1[oindex_1.robot - 1] &= ~ NDSCBT;
  61.     objcts_1.oflag1[oindex_1.spher - 1] |= TAKEBT;
  62.     return ret_val;
  63.  
  64. L1200:
  65.     if (prsvec_1.prsa != vindex_1.drinkw && prsvec_1.prsa != vindex_1.eatw) {
  66.     goto L1300;
  67.     }
  68.     rspeak_(568);
  69. /*                         !EAT OR DRINK, JOKE. */
  70.     return ret_val;
  71.  
  72. L1300:
  73.     if (prsvec_1.prsa != vindex_1.readw) {
  74.     goto L1400;
  75.     }
  76. /*                         !READ, */
  77.     rspeak_(569);
  78. /*                         !JOKE. */
  79.     return ret_val;
  80.  
  81. L1400:
  82.     if (prsvec_1.prsa == vindex_1.walkw || prsvec_1.prsa == vindex_1.takew || 
  83.         prsvec_1.prsa == vindex_1.dropw || prsvec_1.prsa == vindex_1.putw 
  84.         || prsvec_1.prsa == vindex_1.pushw || prsvec_1.prsa == 
  85.         vindex_1.throww || prsvec_1.prsa == vindex_1.turnw || 
  86.         prsvec_1.prsa == vindex_1.leapw) {
  87.     goto L10;
  88.     }
  89.     rspeak_(570);
  90. /*                         !JOKE. */
  91.     return ret_val;
  92. /* AAPPLI, PAGE 3 */
  93.  
  94. /* A2--    MASTER.  PROCESS MOST COMMANDS GIVEN TO MASTER. */
  95.  
  96. L2000:
  97.     if ((objcts_1.oflag2[oindex_1.qdoor - 1] & OPENBT) != 0) {
  98.     goto L2100;
  99.     }
  100.     rspeak_(783);
  101. /*                         !NO MASTER YET. */
  102.     return ret_val;
  103.  
  104. L2100:
  105.     if (prsvec_1.prsa != vindex_1.walkw) {
  106.     goto L2200;
  107.     }
  108. /*                         !WALK? */
  109.     i = 784;
  110. /*                         !ASSUME WONT. */
  111.     if (play_1.here == rindex_1.scorr && (prsvec_1.prso == xsrch_1.xnorth || 
  112.         prsvec_1.prso == xsrch_1.xenter) || play_1.here == rindex_1.ncorr 
  113.         && (prsvec_1.prso == xsrch_1.xsouth || prsvec_1.prso == 
  114.         xsrch_1.xenter)) {
  115.     i = 785;
  116.     }
  117.     rspeak_(i);
  118.     return ret_val;
  119.  
  120. L2200:
  121.     if (prsvec_1.prsa == vindex_1.takew || prsvec_1.prsa == vindex_1.dropw || 
  122.         prsvec_1.prsa == vindex_1.putw || prsvec_1.prsa == 
  123.         vindex_1.throww || prsvec_1.prsa == vindex_1.pushw || 
  124.         prsvec_1.prsa == vindex_1.turnw || prsvec_1.prsa == 
  125.         vindex_1.spinw || prsvec_1.prsa == vindex_1.trntow || 
  126.         prsvec_1.prsa == vindex_1.follow || prsvec_1.prsa == 
  127.         vindex_1.stayw || prsvec_1.prsa == vindex_1.openw || 
  128.         prsvec_1.prsa == vindex_1.closew || prsvec_1.prsa == 
  129.         vindex_1.killw) {
  130.     goto L10;
  131.     }
  132.     rspeak_(786);
  133. /*                         !MASTER CANT DO IT. */
  134.     return ret_val;
  135.  
  136. } /* aappli_ */
  137.  
  138. /* THIEFD-    INTERMOVE THIEF DEMON */
  139.  
  140. /* DECLARATIONS */
  141.  
  142. void thiefd_()
  143. {
  144.     /* System generated locals */
  145.     integer i__1, i__2;
  146.  
  147.     /* Local variables */
  148.     integer i, j, nr;
  149.     logical once;
  150.     integer rhere;
  151.  
  152. /*                         !SET UP DETAIL FLAG. */
  153.     once = FALSE_;
  154. /*                         !INIT FLAG. */
  155. L1025:
  156.     rhere = objcts_1.oroom[oindex_1.thief - 1];
  157. /*                         !VISIBLE POS. */
  158.     if (rhere != 0) {
  159.     hack_1.thfpos = rhere;
  160.     }
  161.  
  162.     if (hack_1.thfpos == play_1.here) {
  163.     goto L1100;
  164.     }
  165. /*                         !THIEF IN WIN RM? */
  166.     if (hack_1.thfpos != rindex_1.treas) {
  167.     goto L1400;
  168.     }
  169. /*                         !THIEF NOT IN TREAS? */
  170.  
  171. /* THIEF IS IN TREASURE ROOM, AND WINNER IS NOT. */
  172.  
  173.     if (rhere == 0) {
  174.     goto L1050;
  175.     }
  176. /*                         !VISIBLE? */
  177.     newsta_(oindex_1.thief, 0, 0, 0, 0);
  178. /*                         !YES, VANISH. */
  179.     rhere = 0;
  180.     if (qhere_(oindex_1.still, rindex_1.treas) || objcts_1.oadv[
  181.         oindex_1.still - 1] == -oindex_1.thief) {
  182.     newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
  183.     }
  184. L1050:
  185.     i__1 = -oindex_1.thief;
  186.     i = robadv_(i__1, hack_1.thfpos, 0, 0);
  187. /*                         !DROP VALUABLES. */
  188.     if (qhere_(oindex_1.egg, hack_1.thfpos)) {
  189.     objcts_1.oflag2[oindex_1.egg - 1] |= OPENBT;
  190.     }
  191.     goto L1700;
  192.  
  193. /* THIEF AND WINNER IN SAME ROOM. */
  194.  
  195. L1100:
  196.     if (hack_1.thfpos == rindex_1.treas) {
  197.     goto L1700;
  198.     }
  199. /*                         !IF TREAS ROOM, NOTHING. */
  200.     if ((rooms_1.rflag[hack_1.thfpos - 1] & RLIGHT) != 0) {
  201.     goto L1400;
  202.     }
  203.     if (hack_1.thfflg) {
  204.     goto L1300;
  205.     }
  206. /*                         !THIEF ANNOUNCED? */
  207.     if (rhere != 0 || prob_(70, 70)) {
  208.     goto L1150;
  209.     }
  210. /*                         !IF INVIS AND 30%. */
  211.     if (objcts_1.ocan[oindex_1.still - 1] != oindex_1.thief) {
  212.     goto L1700;
  213.     }
  214. /*                         !ABORT IF NO STILLETTO. */
  215.     newsta_(oindex_1.thief, 583, hack_1.thfpos, 0, 0);
  216. /*                         !INSERT THIEF INTO ROOM. */
  217.     hack_1.thfflg = TRUE_;
  218. /*                         !THIEF IS ANNOUNCED. */
  219.     return;
  220.  
  221. L1150:
  222.     if (rhere == 0 || (objcts_1.oflag2[oindex_1.thief - 1] & FITEBT) 
  223.         == 0) {
  224.     goto L1200;
  225.     }
  226.     if (winnin_(oindex_1.thief, play_1.winner)) {
  227.     goto L1175;
  228.     }
  229. /*                         !WINNING? */
  230.     newsta_(oindex_1.thief, 584, 0, 0, 0);
  231. /*                         !NO, VANISH THIEF. */
  232.     objcts_1.oflag2[oindex_1.thief - 1] &= ~ FITEBT;
  233.     if (qhere_(oindex_1.still, hack_1.thfpos) || objcts_1.oadv[
  234.         oindex_1.still - 1] == -oindex_1.thief) {
  235.     newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
  236.     }
  237.     return;
  238.  
  239. L1175:
  240.     if (prob_(90, 90)) {
  241.     goto L1700;
  242.     }
  243. /*                         !90% CHANCE TO STAY. */
  244.  
  245. L1200:
  246.     if (rhere == 0 || prob_(70, 70)) {
  247.     goto L1250;
  248.     }
  249. /*                         !IF VISIBLE AND 30% */
  250.     newsta_(oindex_1.thief, 585, 0, 0, 0);
  251. /*                         !VANISH THIEF. */
  252.     if (qhere_(oindex_1.still, hack_1.thfpos) || objcts_1.oadv[
  253.         oindex_1.still - 1] == -oindex_1.thief) {
  254.     newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
  255.     }
  256.     return;
  257.  
  258. L1300:
  259.     if (rhere == 0) {
  260.     goto L1700;
  261.     }
  262. /*                         !ANNOUNCED.  VISIBLE? */
  263. L1250:
  264.     if (prob_(70, 70)) {
  265.     return;
  266.     }
  267. /*                         !70% CHANCE TO DO NOTHING. */
  268.     hack_1.thfflg = TRUE_;
  269.     i__1 = -oindex_1.thief;
  270.     i__2 = -oindex_1.thief;
  271.     nr = robrm_(hack_1.thfpos, 100, 0, 0, i__1) + robadv_(
  272.         play_1.winner, 0, 0, i__2);
  273.     i = 586;
  274. /*                         !ROBBED EM. */
  275.     if (rhere != 0) {
  276.     i = 588;
  277.     }
  278. /*                         !WAS HE VISIBLE? */
  279.     if (nr != 0) {
  280.     ++i;
  281.     }
  282. /*                         !DID HE GET ANYTHING? */
  283.     newsta_(oindex_1.thief, i, 0, 0, 0);
  284. /*                         !VANISH THIEF. */
  285.     if (qhere_(oindex_1.still, hack_1.thfpos) || objcts_1.oadv[
  286.         oindex_1.still - 1] == -oindex_1.thief) {
  287.     newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
  288.     }
  289.     if (nr != 0 && ! lit_(hack_1.thfpos)) {
  290.     rspeak_(406);
  291.     }
  292.     rhere = 0;
  293.     goto L1700;
  294. /*                         !ONWARD. */
  295.  
  296. /* NOT IN ADVENTURERS ROOM. */
  297.  
  298. L1400:
  299.     newsta_(oindex_1.thief, 0, 0, 0, 0);
  300. /*                         !VANISH. */
  301.     rhere = 0;
  302.     if (qhere_(oindex_1.still, hack_1.thfpos) || objcts_1.oadv[
  303.         oindex_1.still - 1] == -oindex_1.thief) {
  304.     newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
  305.     }
  306.     if ((rooms_1.rflag[hack_1.thfpos - 1] & RSEEN) == 0) {
  307.     goto L1700;
  308.     }
  309.     i__1 = -oindex_1.thief;
  310.     i = robrm_(hack_1.thfpos, 75, 0, 0, i__1);
  311. /*                         !ROB ROOM 75%. */
  312.     if (hack_1.thfpos < rindex_1.maze1 || hack_1.thfpos > rindex_1.maz15 || 
  313.         play_1.here < rindex_1.maze1 || play_1.here > rindex_1.maz15) {
  314.     goto L1500;
  315.     }
  316.     i__1 = objcts_1.olnt;
  317.     for (i = 1; i <= i__1; ++i) {
  318. /*                         !BOTH IN MAZE. */
  319.     if (! qhere_(i, hack_1.thfpos) || prob_(60, 60) || (
  320.         objcts_1.oflag1[i - 1] & VISIBT + TAKEBT) !=
  321.          VISIBT + TAKEBT) {
  322.         goto L1450;
  323.     }
  324.     rspsub_(590, objcts_1.odesc2[i - 1]);
  325. /*                         !TAKE OBJECT. */
  326.     if (prob_(40, 20)) {
  327.         goto L1700;
  328.     }
  329.     i__2 = -oindex_1.thief;
  330.     newsta_(i, 0, 0, 0, i__2);
  331. /*                         !MOST OF THE TIME. */
  332.     objcts_1.oflag2[i - 1] |= TCHBT;
  333.     goto L1700;
  334. L1450:
  335.     ;
  336.     }
  337.     goto L1700;
  338.  
  339. L1500:
  340.     i__1 = objcts_1.olnt;
  341.     for (i = 1; i <= i__1; ++i) {
  342. /*                         !NOT IN MAZE. */
  343.     if (! qhere_(i, hack_1.thfpos) || objcts_1.otval[i - 1] != 0 || 
  344.         prob_(80, 60) || (objcts_1.oflag1[i - 1] & 
  345.         VISIBT + TAKEBT) != VISIBT + 
  346.         TAKEBT) {
  347.         goto L1550;
  348.     }
  349.     i__2 = -oindex_1.thief;
  350.     newsta_(i, 0, 0, 0, i__2);
  351.     objcts_1.oflag2[i - 1] |= TCHBT;
  352.     goto L1700;
  353. L1550:
  354.     ;
  355.     }
  356.  
  357. /* NOW MOVE TO NEW ROOM. */
  358.  
  359. L1700:
  360.     if (objcts_1.oadv[oindex_1.rope - 1] == -oindex_1.thief) {
  361.     findex_1.domef = FALSE_;
  362.     }
  363.     if (once) {
  364.     goto L1800;
  365.     }
  366.     once = ! once;
  367. L1750:
  368.     --hack_1.thfpos;
  369. /*                         !NEXT ROOM. */
  370.     if (hack_1.thfpos <= 0) {
  371.     hack_1.thfpos = rooms_1.rlnt;
  372.     }
  373.     if ((rooms_1.rflag[hack_1.thfpos - 1] & RLAND + RSACRD + 
  374.         REND) != RLAND) {
  375.     goto L1750;
  376.     }
  377.     hack_1.thfflg = FALSE_;
  378. /*                         !NOT ANNOUNCED. */
  379.     goto L1025;
  380. /*                         !ONCE MORE. */
  381.  
  382. /* ALL DONE. */
  383.  
  384. L1800:
  385.     if (hack_1.thfpos == rindex_1.treas) {
  386.     return;
  387.     }
  388. /*                         !IN TREASURE ROOM? */
  389.     j = 591;
  390. /*                         !NO, DROP STUFF. */
  391.     if (hack_1.thfpos != play_1.here) {
  392.     j = 0;
  393.     }
  394.     i__1 = objcts_1.olnt;
  395.     for (i = 1; i <= i__1; ++i) {
  396.     if (objcts_1.oadv[i - 1] != -oindex_1.thief || prob_(70, 70) 
  397.         || objcts_1.otval[i - 1] > 0) {
  398.         goto L1850;
  399.     }
  400.     newsta_(i, j, hack_1.thfpos, 0, 0);
  401.     j = 0;
  402. L1850:
  403.     ;
  404.     }
  405.     return;
  406.  
  407. } /* thiefd_ */
  408.